﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SCP_UNA_MVC.Models;
using SCP_UNA_MVC.Libs;

namespace SCP_UNA_MVC.Controllers
{
    [RequireHttps]
    public class CarrinhoController : DefaultController
    {
        //
        // GET: /Carrinho/        
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult AddCarrinho(string id)
        {
            StringArray strArray = new StringArray();

            var carrinho = strArray.StringToArray(AddCestaCompra(id), ",");

            return Json(carrinho.Count, JsonRequestBehavior.AllowGet);
        }

        public ActionResult EfetuarCompra(string id)
        {
            SCP_DataDataContext dt = new SCP_DataDataContext();
            bool success = false;
            string msg = string.Empty;

            AddCestaCompra(id);

            List<sp_verificaCadastroResult> cadastroLocalizacao;

            if (passportAtual != null)
            {
                cadastroLocalizacao = dt.sp_verificaCadastro(passportAtual.Id).ToList();

                if (cadastroLocalizacao[0].qtd > 0)
                {
                    success = true;
                }
            }
            else
            {
                msg = "É preciso logar no sistema antes de efetuar uma compra.";
            }

            return Json(new { sucesso = success, mensagem = msg }, JsonRequestBehavior.AllowGet);
        }

        public string AddCestaCompra(string produto)
        {
            if (produto == "undefined") return string.Empty;

            if (Session["produto_id"] == null)
            {
                Session["produto_id"] = produto;
            }
            else
            {
                StringArray strArray = new StringArray();

                List<string> sessao_produtos = strArray.StringToArray(Session["produto_id"].ToString(), ",");

                bool verificaArray = sessao_produtos.Contains(produto);
                if (!verificaArray)
                {
                    sessao_produtos.Add(produto);

                    var aString = strArray.ArrayToString(sessao_produtos, ",");

                    Session["produto_id"] = aString;
                }
            }

            return Session["produto_id"].ToString();
        }
        public ActionResult TotalCarrinho()
        {
            if (Session["produto_id"] != null)
            {
                StringArray strArray = new StringArray();

                var carrinho = strArray.StringToArray(Session["produto_id"].ToString(), ",");

                return Json(carrinho.Count, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json(null);
            }
        }

        public ActionResult RemoveProdutoCarrinho(string id)
        {
            StringArray strArray = new StringArray();

            var carrinho = strArray.StringToArray(Session["produto_id"].ToString(), ",");

            carrinho.Remove(id);

            Session["produto_id"] = strArray.ArrayToString(carrinho, ",");

            return Json(null, JsonRequestBehavior.AllowGet);
        }

        public ActionResult FinalizarCompra(string id)
        {
            //SCP_DataDataContext dt = new SCP_DataDataContext();
            //bool success = false;
            //string msg = string.Empty;

            //try
            //{
            //    if (passportAtual != null)
            //    {
            //        if (Session["produto_id"] != null)
            //        {
            //            int clientid = ((Passport)Session["PassPort"]).Id;
            //            foreach (string produtoid in Session["produto_id"].ToString().Split(','))
            //            {

            //            }
            //            msg = "Baixa de estoque efetuada com sucesso!!!";
            //        }
            //        else
            //        {
            //            success = false;
            //        }
            //    }
            //    else
            //    {
            //        msg = "É preciso logar no sistema antes de efetuar uma compra.";
            //    }
            //}
            //catch (Exception e)
            //{
            //    msg = e.Message;
            //}

            //return Json(new { sucesso = success, mensagem = msg }, JsonRequestBehavior.AllowGet);
            Session["produto_id"] = string.Empty;
            return Json(null);
        }

        public ActionResult RetornoCompra()
        {
            return View();
        }

        [HttpPost]
        public ActionResult RetornoCompra(FormCollection colecao)
        {
            string msg = string.Empty;
            try
            {
                SCP_DataDataContext dt = new SCP_DataDataContext();
                int numero_itens = Int32.Parse(colecao["NumItens"]);

                int cliente_id = dt.Clientes.SingleOrDefault(q => q.nome.Equals(colecao["CliNome"])).id;

                for (var i = 1; i <= numero_itens; i++)
                {
                    Venda venda = new Venda();
                    venda.clienteid = cliente_id;
                    venda.transacaoid = colecao["TransacaoID"];
                    venda.data_transacao = DateTime.Now; //DateTime.Parse(colecao["DataTransacao"]);
                    venda.cliente_email = colecao["CliEmail"];
                    venda.vendedor_email = colecao["VendedorEmail"];
                    venda.status_transacao = colecao["StatusTransacao"];
                    venda.tipo_pagamento = colecao["TipoPagamento"];
                    venda.parcelas = int.Parse(colecao["Parcelas"]);
                    venda.produtoid = Int32.Parse(colecao["ProdID_" + i]);
                    venda.quantidade = Int32.Parse(colecao["ProdQuantidade_" + i]);
                    venda.valor_produto = double.Parse(colecao["ProdValor_" + i]);
                    venda.tipo_frete = colecao["TipoFrete"];
                    venda.valor_frete = double.Parse(colecao["ProdFrete_" + i]);
                    if (venda.valor_frete == 0)
                        venda.valor_frete = double.Parse(colecao["ValorFrete"]);
                    venda.desconto = 0;
                    dt.Vendas.InsertOnSubmit(venda);
                    dt.SubmitChanges();

                    ControleEstoqueService.ControleEstoqueService svc = new ControleEstoqueService.ControleEstoqueService();
                    svc.baixaEstoquePorVenda(venda.clienteid, true, venda.produtoid, true, venda.valor_produto + venda.valor_frete, true, venda.desconto, true, venda.quantidade, true, "Venda on-line do site www.compreconstrua.com.br");

                    msg = "Obrigado Pela Compra! Entraremos em contato com você por e-mail.";
                }
            }
            catch (Exception e)
            {
                msg = "Não foi possível efetuar sua compra. " + e.Message;
            }

            Session["produto_id"] = string.Empty;
            ViewData["Mensagem"] = msg;
            return View();
        }
    }
}
